﻿using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Controllers;
using Interfaces;

namespace Views.Moduler
{
    public partial class SøgBrugere : UserControl
    {
        #region Fields

        private IBruger _selectedBruger;
        private readonly Controller _controller;

        #endregion

        #region Creation

        public SøgBrugere(Controller controller)
        {
            InitializeComponent();
            _controller = controller;

            OpdaterSide();
        }

        #endregion

        #region Events

        private void ListViewBrugere_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var ibruger = (IBruger)ListViewBrugere.SelectedItem;
            _selectedBruger = ibruger;

            if (_selectedBruger == null) return;
            BrugerValgt();
        }

        private void TxtSøgning_TextChanged(object sender, TextChangedEventArgs e)
        {
            //Søger i bruger listen hvor strengen indeholder initialer fra listen, 
            //og tilføjer det til listviewed
            ListViewBrugere.ItemsSource = _controller.HentAlleBrugere()
                                                     .Where(s => s.Initialer.Contains(TxtSøgning.Text.ToUpper()))
                                                     .ToList();
        }

        private void SøgBrugere_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
                TxtSøgning.Clear();
            if (e.Key == Key.Enter)
                TxtSøgning.SelectAll();
        }

        private void BtnBrugerHistorik_Click(object sender, RoutedEventArgs e)
        {
            if (_selectedBruger == null) return;

            var window = new BrugerHistorik(_controller, _selectedBruger);
            window.ShowDialog();
        }

        private void BtnUdskrivKontrakt_Click(object sender, RoutedEventArgs e)
        {
            _controller.UdskrivKontrakt(_selectedBruger);
        }

        private void BtnVisUdlån_Click(object sender, RoutedEventArgs e)
        {
            if (_selectedBruger == null) return;

            var window = new BrugerUdlån(_controller, _selectedBruger);
            window.ShowDialog();
        }

        private void ListViewBrugere_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (_selectedBruger == null) return;

            BtnVisUdlån_Click(null, new RoutedEventArgs());
        }

        #endregion

        #region Tilstandsstyring

        public void OpdaterSide()
        {
            ListViewBrugere.ItemsSource = null;
            BtnVisUdlån.IsEnabled = false;
            BtnBrugerHistorik.IsEnabled = false;
            BtnUdskrivKontrakt.IsEnabled = false;
            TxtSøgning.Clear();
            TxtSøgning.Focus();
            OpdaterBrugereListView();
        }

        public void BrugerValgt()
        {
            BtnBrugerHistorik.IsEnabled = true;
            BtnUdskrivKontrakt.IsEnabled = true;
            BtnVisUdlån.IsEnabled = true;
        }

        private void OpdaterBrugereListView()
        {
            ListViewBrugere.ItemsSource = _controller.HentAlleBrugere();
        }

        #endregion
    }
}
